/*
 * Copyright (C) 2010-2014 Enrique Lara (enrique.posix2.lara@gmail.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package app.transittool;

import android.app.Activity;

import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;

import android.location.Location;

import android.net.Uri;

import android.view.View;

import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import app.transittool.model.App;
import app.transittool.model.Route;
import app.transittool.model.Stop;

import app.transittool.util.Constants;

import java.text.MessageFormat;
import java.util.Date;

public final class Android {
    private Android() {
    }

    public static TextView cptxt(final View view, final int viewId, final CharSequence value) {
        if (view == null) {
            throw new NullPointerException("View must not be null.");
        }

        final TextView text = (TextView) view.findViewById(viewId);

        if (text != null) {
            if (value != null) {
                text.setText(value);
            } else {
                text.setText("");
            }
        }

        return text;
    }

    public static TextView cptxt(final Activity activity, final int viewId, final CharSequence value) {
        final TextView text = (TextView) activity.findViewById(viewId);

        if (text != null) {
            if (value != null) {
                text.setText(value);
            } else {
                text.setText("");
            }
        }

        return text;
    }

    public static void cproute(final View view, final int viewId, final Route route) {
        final View line = view.findViewById(viewId);

        if (line instanceof ImageView) {
            ((ImageView) line).setImageResource(route.getImageId());
        } else {
            cptxt(view, viewId, route.getCode());
        }
    }

    public static void showLongToast(final Context c, final int resId, final Object... params) {
        final CharSequence msg = MessageFormat.format(c.getText(resId).toString(), params);

        showLongToast(c, msg);
    }

    public static void showLongToast(final Context c, final CharSequence msg) {
        if (c instanceof Activity) {
            final Activity a = (Activity) c;
            a.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(a, msg, Toast.LENGTH_LONG).show();
                    }
                });
        } else {
            Toast.makeText(c, msg, Toast.LENGTH_LONG).show();
        }
    }

    public static void showShortToast(final Context c, final CharSequence msg) {
        if (c instanceof Activity) {
            final Activity a = (Activity) c;
            a.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(a, msg, Toast.LENGTH_SHORT).show();
                    }
                });
        } else {
            Toast.makeText(c, msg, Toast.LENGTH_SHORT).show();
        }
    }

    public static void gotoMap(final Activity context, final double lat, final double lon) {
        try {
            final Uri uri = Uri.parse("http://maps.google.com/maps" + "?q=" + lat + "," + lon + "&ll=" + lat + "," + lon);
            final Intent intent = new Intent(Intent.ACTION_VIEW, uri);

            context.startActivity(intent);
        } catch (final ActivityNotFoundException e) {
            App.showError(context, "This system does not support viewing Maps.", e);
        }
    }

    public static void gotoStreetView(final Activity context, final double lat, final double lon) {
        try {
            final Uri uri = Uri.parse("google.streetview:cbll=" + lat + "," + lon);
            final Intent intent = new Intent(Intent.ACTION_VIEW, uri);

            context.startActivity(intent);
        } catch (final ActivityNotFoundException e) {
            App.showError(context, "This system does not support viewing Street View.", e);
        }
    }

    public static CharSequence formatDate(final Context c, final Date lastRefreshed) {
        final String format = android.text.format.DateFormat.is24HourFormat(c) ? Constants.T24 : Constants.T12;

        final CharSequence dateStr = android.text.format.DateFormat.format(format, lastRefreshed);

        return dateStr;
    }

    public static Location toLocation(final Stop s) {
        final Location l = new Location("app.transittool.AllAlarms");
        l.setLatitude(s.getLat());
        l.setLongitude(s.getLon());
        l.setTime(System.currentTimeMillis());

        return l;
    }
}
